module lzd #(
    parameter WIDTH = 48
) (
    input [WIDTH-1:0] data,
    output reg [5:0] count
);
    // 分级检测逻辑（以48位为例）
    wire [5:0] count_high, count_low;
    wire high_nonzero;

    // 第1级：检测高24位是否有非零
    assign high_nonzero = |data[WIDTH-1:WIDTH/2];

    // 第2级：递归检测高24位或低24位
    lzd_core #(.WIDTH(WIDTH/2)) lzd_high (
        .data(data[WIDTH-1:WIDTH/2]),
        .count(count_high)
    );

    lzd_core #(.WIDTH(WIDTH/2)) lzd_low (
        .data(data[WIDTH/2-1:0]),
        .count(count_low)
    );

    // 第3级：合并结果
    always @(*) begin
        if (high_nonzero) begin
            count = count_high;
        end else begin
            count = count_low + (WIDTH/2); // 低部分前导零 + 高部分的24位
        end
    end
endmodule
